package fr.afcepf.atod18.commande.entity;

import java.util.Calendar;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import fr.afcepf.atod18.client.entity.Client;
import fr.afcepf.atod18.client.entity.Remise;
import fr.afcepf.atod18.restaurants.entity.Restaurant;
import fr.afcepf.atod18.utilitaires.entity.Adresse;

@Entity
@Table
public class Commande {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Calendar dateCommandeCalendar;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Calendar dateDemandeLivraison;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Calendar dateLivraison;
	private double totalCommande;
	
	@ManyToOne
	Restaurant restaurant;
    @OneToMany(cascade= CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinTable(name="Commande_prdSelect",joinColumns={@JoinColumn(name="commande_id")}, inverseJoinColumns={@JoinColumn(name="prdSelect_id")})
    private Set<ProduitSelectionne> produitSelectionnes;
//	@ManyToOne
//	private Panier panier;
    @ManyToOne
    private EtatCommande etatCommande;
	@ManyToOne
	private Client client;
	@ManyToOne
	private Adresse adresse;
	@ManyToOne
	private Remise remise;
	@OneToMany(cascade= CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinTable(name="Commande_histoCommande",joinColumns={@JoinColumn(name="commande_id")}, inverseJoinColumns={@JoinColumn(name="histoCommande_id")})
	private Set<HistoriqueCommande> historiqueCommandes;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Calendar getDateCommandeCalendar() {
		return dateCommandeCalendar;
	}
	public void setDateCommandeCalendar(Calendar dateCommandeCalendar) {
		this.dateCommandeCalendar = dateCommandeCalendar;
	}
	public Calendar getDateDemandeLivraison() {
		return dateDemandeLivraison;
	}
	public void setDateDemandeLivraison(Calendar dateDemandeLivraison) {
		this.dateDemandeLivraison = dateDemandeLivraison;
	}
	public Calendar getDateLivraison() {
		return dateLivraison;
	}
	public void setDateLivraison(Calendar dateLivraison) {
		this.dateLivraison = dateLivraison;
	}
	public double getTotalCommande() {
		return totalCommande;
	}
	public void setTotalCommande(double totalCommande) {
		this.totalCommande = totalCommande;
	}
	public Client getClient() {
		return client;
	}
	public void setClient(Client client) {
		this.client = client;
	}
	public Adresse getAdresse() {
		return adresse;
	}
	public void setAdresse(Adresse adresse) {
		this.adresse = adresse;
	}
	public Remise getRemise() {
		return remise;
	}
	public void setRemise(Remise remise) {
		this.remise = remise;
	}
    /**
     * @return the produitSelectionnes
     */
    public Set<ProduitSelectionne> getProduitSelectionnes() {
        return produitSelectionnes;
    }
    /**
     * @param paramProduitSelectionnes the produitSelectionnes to set
     */
    public void setProduitSelectionnes(
            Set<ProduitSelectionne> paramProduitSelectionnes) {
        produitSelectionnes = paramProduitSelectionnes;
    }
    /**
     * @return the etatCommande
     */
    public EtatCommande getEtatCommande() {
        return etatCommande;
    }
    /**
     * @param paramEtatCommande the etatCommande to set
     */
    public void setEtatCommande(EtatCommande paramEtatCommande) {
        etatCommande = paramEtatCommande;
    }
    /**
     * @return the historiqueCommandes
     */
    public Set<HistoriqueCommande> getHistoriqueCommandes() {
        return historiqueCommandes;
    }
    /**
     * @param paramHistoriqueCommandes the historiqueCommandes to set
     */
    public void setHistoriqueCommandes(
            Set<HistoriqueCommande> paramHistoriqueCommandes) {
        historiqueCommandes = paramHistoriqueCommandes;
    }
//    /**
//     * @return the panier
//     */
//    public Panier getPanier() {
//        return panier;
//    }
//    /**
//     * @param paramPanier the panier to set
//     */
//    public void setPanier(Panier paramPanier) {
//        panier = paramPanier;
//    }
	/**
	 * @return le restaurant
	 */
	public Restaurant getRestaurant() {
		return restaurant;
	}
	/**
	 * @param restaurant le restaurant à définir
	 */
	public void setRestaurant(Restaurant restaurant) {
		this.restaurant = restaurant;
	}
}
